package arrays;

import java.util.ArrayList;
import java.util.List;

/**
 * 给定一个包含 m x n 个元素的矩阵（m 行, n 列），请按照顺时针螺旋顺序，返回矩阵中的所有元素。
 *
 * 示例 1:
 *
 * 输入:
 * [
 *  [ 1, 2, 3 ],
 *  [ 4, 5, 6 ],
 *  [ 7, 8, 9 ]
 * ]
 * 输出: [1,2,3,6,9,8,7,4,5]
 * 示例 2:
 *
 * 输入:
 * [
 *   [1, 2, 3, 4],
 *   [5, 6, 7, 8],
 *   [9,10,11,12]
 * ]
 * 输出: [1,2,3,4,8,12,11,10,9,5,6,7]
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/spiral-matrix
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * */
public class SpiralOrder {

    public List<Integer> spiralOrder(int[][] matrix) {
        if(matrix == null || matrix.length == 0 || matrix[0].length == 0){
            return new ArrayList<>();
        }
        List<Integer> result = new ArrayList<>();
        int rows = 0;
        int cols = 0;
        int rowe = matrix.length - 1;
        int cole = matrix[0].length - 1;
        while(rows <= rowe && cols <= cole){
            if(cole >= cols){
                for(int i = cols; i <= cole; i ++){
                    result.add(matrix[rows][i]);
                }
            }
            rows ++;
            if(rowe >= rows){
                for(int i = rows; i <= rowe; i ++){
                    result.add(matrix[i][cole]);
                }
            }
            cole --;
            if(cole >= cols && rowe >= rows){
                for(int i = cole; i >= cols; i --){
                    result.add(matrix[rowe][i]);
                }
            }
            rowe --;
            if(rowe >= rows && cole >= cols){
                for(int i = rowe; i >= rows; i --){
                    result.add(matrix[i][cols]);
                }
            }
            cols ++;
        }

        return result;
    }

    public static void main(String[] args){
        System.out.println((new SpiralOrder()).spiralOrder(new int[][]{{1,2}}));
    }
}
